セキュリティテストツールvulsをインストールしてみた
こんにちわ、ヨシエです。
先日、Infrastructure as Code Casualという Infrastructure as Codeの勉強会に参加してきました。
勉強会で@koiwaさんが発表されたセキュリティテストツールのVulsを紹介して聞いて、
どんなものかと興味が出たのでAWS環境でVulsを使ってみました。
Vulsとは
VulsはCVEの情報を取得して指定したサーバーにインストールされているパッケージで脆弱性があるかを
チェックするツールになります。
CVEとは
簡単に言うとソフトウェアの脆弱性を纏めたデータベースになります。
脆弱性情報を確認する時にはCVEのサイトを覗いてみると脆弱性の危険性について、スコア別になっているので指摘されている部分とスコアを
確認すると良いと思われます。
Common Vulnerabilities and Exposures
脆弱性情報のサイトでよく目にする「CVE」とは?
インストール手順
検証環境
EC2インスタンス(Amazon Linux:t2.micro)
パッケージ準備
Vulsを利用するには以下のパッケージインストールが必要になります。
- sqlite3
- git
- gcc
- go
※goのみが1.6以降のバージョンをサポートとのことで別途DLしてインストールする必要があります。
$ sudo yum install -y sqlite3 git gcc $ wget https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz $ sudo tar -C /usr/local -xzf go1.6.3.linux-amd64.tar.gz $ mkdir $HOME/go $ ls -ld $HOME/go drwxrwxr-x 2 ec2-user ec2-user 4096 7月 26 10:49 /home/ec2-user/go
Go変数設定スクリプト作成
$ sudo vim /etc/profile.d/goenv.sh export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin $ source /etc/profile.d/goenv.sh
Vulsログ置き場を作成、CVE情報取得ツール(go-cve-dictionary)インストール
$ sudo mkdir /var/log/vuls $ sudo chown ec2-user /var/log/vuls $ sudo chmod 700 /var/log/vuls $ go get github.com/kotakanbe/go-cve-dictionary
2002年 〜 2016年のCVE情報取得
$ for i in {2002..2016}; do go-cve-dictionary fetchnvd -years $i; done
Vulsインストール
$ go get github.com/future-architect/vuls
Vulsコンフィグファイル作成
vim config.toml [servers.TEST-A] host = "ec2-aa-aa-aa-aa.ap-northeast-1.compute.amazonaws.com" port = "22" user = "ec2-user" keyPath = "/home/ec2-user/.ssh/xxxx" [servers.TEST-B] host = "ec2-bb-bb-bb-bb.ap-northeast-1.compute.amazonaws.com" port = "22" user = "ec2-user" keyPath = "/home/ec2-user/.ssh/xxxx"
コンフィグ正常性テスト
vuls configtest [Jul 26 11:09:24] INFO [localhost] Validating Config... [Jul 26 11:09:24] INFO [localhost] Detecting Server/Contianer OS... [Jul 26 11:09:24] INFO [localhost] Detecting OS of servers... [Jul 26 11:09:25] INFO [localhost] (1/2) Detected: TEST-A: amazon 2016.03 [Jul 26 11:09:25] INFO [localhost] (2/2) Detected: TEST-B: amazon 2016.03 [Jul 26 11:09:25] INFO [localhost] Detecting OS of containers... [Jul 26 11:09:25] INFO [localhost] SSH-able servers are below...
脆弱性スキャン開始
$ vuls prepare INFO[0000] Start Preparing (config: /home/ec2-user/config.toml) [Jul 26 11:09:38] INFO [localhost] Detecting OS... [Jul 26 11:09:38] INFO [localhost] Detecting OS of servers... [Jul 26 11:09:38] INFO [localhost] (1/2) Detected: TEST-B: amazon 2016.03 [Jul 26 11:09:38] INFO [localhost] (2/2) Detected: TEST-A: amazon 2016.03 [Jul 26 11:09:38] INFO [localhost] Detecting OS of containers... [Jul 26 11:09:38] INFO [localhost] SSH-able servers are below... TEST-B TEST-A [Jul 26 11:09:38] INFO [localhost] Installing... [Jul 26 11:09:38] INFO [TEST-A] Nothing to do [Jul 26 11:09:38] INFO [TEST-B] Nothing to do [Jul 26 11:09:38] INFO [localhost] Success $ vuls scan -cve-dictionary-dbpath=$PWD/cve.sqlite3 INFO[0000] Start scanning INFO[0000] config: /home/ec2-user/config.toml INFO[0000] cve-dictionary: /home/ec2-user/cve.sqlite3 [Jul 26 11:09:45] INFO [localhost] Validating Config... [Jul 26 11:09:45] INFO [localhost] Detecting Server/Contianer OS... [Jul 26 11:09:45] INFO [localhost] Detecting OS of servers... [Jul 26 11:09:45] INFO [localhost] (1/2) Detected: TEST-A: amazon 2016.03 [Jul 26 11:09:45] INFO [localhost] (2/2) Detected: TEST-B: amazon 2016.03 [Jul 26 11:09:45] INFO [localhost] Detecting OS of containers... [Jul 26 11:09:45] INFO [localhost] SSH-able servers are below... TEST-A TEST-B [Jul 26 11:09:45] INFO [localhost] Detecting Platforms... [Jul 26 11:09:45] INFO [localhost] (1/2) TEST-A is running on aws [Jul 26 11:09:45] INFO [localhost] (2/2) TEST-B is running on aws [Jul 26 11:09:45] INFO [localhost] Scanning vulnerabilities... [Jul 26 11:09:45] INFO [localhost] Check required packages for scanning... [Jul 26 11:09:45] INFO [localhost] Scanning vulnerable OS packages... [Jul 26 11:09:47] INFO [TEST-A] Fetching CVE details... [Jul 26 11:09:47] INFO [TEST-A] Done [Jul 26 11:09:47] INFO [TEST-B] Fetching CVE details... [Jul 26 11:09:47] INFO [TEST-B] Done [Jul 26 11:09:47] INFO [localhost] Scanning vulnerable software specified in the CPE... [Jul 26 11:09:47] INFO [localhost] Insert to DB... [Jul 26 11:09:48] INFO [localhost] Reporting...
脆弱性試験結果出力
vuls tui
最後に
私自身がGoを初心者ということでインストールに悩むかと思いましたが、
Github上のチュートリアルが充実しているおかげで、実際のインストールからスキャン実行までは1時間程度で出来る難易度で
ターミナルで発見した脆弱性を見るtuiやS3バケットへのレポート出力機能が非常にシンプルなので使い勝手は良い印象でした。
少し前までやってた案件の時にこれを知っていたら、私はどれだけ幸せだったんだろうと切ない気持ちになりました。